package com.itheima.config;

import com.itheima.dao.AccountDao;
import com.itheima.domain.Account;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author by itheima
 * @Date 2022/4/22
 * @Description 定义mybatis配置文件
 * 存在的问题：
 *  1.依旧使用xml配置mybatis，代码依旧使用mybatis的开发流程去配置；
 *  2.有多好个dao接口，就要写多少个被@Bean修饰的方法，维护性差
 *  mybatis为我们提供了spring整合mybtis的方案，我们只需引入相关依赖，做配置即可；
 */
//@Configuration
public class MybatisConfig_bak {

    /**
     * 将mybatis的会话工厂维护到ioc容器中
     * @return
     */
    @Bean
    public SqlSessionFactory sqlSessionFactory(){
        SqlSessionFactory factory=null;
        //实例化工厂建造类
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //读取核心配置文件
        try (InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml")) {
            //创建工厂对象
            factory = builder.build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return factory;
    }

    /**
     * 定义会话对象
     * @param factory
     * @return
     */
    @Bean
    public SqlSession session(SqlSessionFactory factory){
        //true:表示事务默认自动提交
        return factory.openSession(true);
    }

    /**
     * 将接口的代理对象作为一个bean被ioc容器管理
     * @param session
     * @return
     */
    @Bean
    public AccountDao accountDao(SqlSession session){
        return session.getMapper(AccountDao.class);
    }
}
